<?php

/**
 * UserIdentity represents the data needed to identity a user.
 * It contains the authentication method that checks if the provided
 * data can identity the user.
 */
class UserIdentity extends CUserIdentity
{

  private $_id;
  /**
   * Authenticates a user.
   * The example implementation makes sure if the username and password
   * are both 'demo'.
   * In practical applications, this should be changed to authenticate
   * against some persistent user identity storage (e.g. database).
   * @return boolean whether authentication succeeds.
   */
  public function authenticate()
  {
    $password = sha1($this->password . $this->username . Constants::SALT);
    $user = Members::model()->find('LOWER(nickname)="'. strtolower($this->username) . '" AND password = "' . $password . '"');

    if ($user === null) {
      $this->errorCode = self::ERROR_USERNAME_INVALID;
    } else {
      if ($user->member_type ==  Constants::MEMBER_TYPE_ADMIN) {
          $this->_id = $user->member_id;
          $this->username = $user->nickname;
          $this->errorCode = self::ERROR_NONE;
          $this->setState('roles', 'admin');
      } else {
          $this->_id = $user->member_id;
          $this->username = $user->nickname;
          $this->errorCode = self::ERROR_NONE;
          $this->setState('roles', 'member');
      }
    }

    return $this->errorCode == self::ERROR_NONE;
  }

  /**
   * @return integer the ID of the user record
   */
  public function getId()
  {
    return $this->_id;
  }
}